{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 生成式模型VS判别式模型浅析\n",
    "\n",
    "\n",
    "这两天在学习隐马尔可夫链模型(HMM)和条件随机场模型(CRF)，在学习完CRF后，我发现线性链CRF好像和HMM差不多嘛，两者有什么区别呢？\n",
    "\n",
    "查阅资料后发现两者差异有很多，其中有一个区别是：HMM属于生成式模型（Generative Model），而CRF属于判别式模型（Discrimitive Model）。\n",
    "\n",
    "今天总结一下这两个模型之间的区别。\n",
    "\n",
    "假设我们已有训练数据$(X,Y)$，$X$是属性集合，$Y$是类别标记。这时来了一个新的样本 $x$ ，我们想要预测它的类别 $y$ 。\n",
    "\n",
    "我们最终的目的是要求得最大的条件概率$ P(y|x)$ 作为新样本的分类。\n",
    "\n",
    "1.判别式模型这么做：\n",
    "\n",
    "我们根据训练数据得到分类函数和分界面，比如说根据SVM模型得到了一个分界面，然后直接计算条件概率 P(y|x) ，我们将最大的 P(y|x) 作为新样本的分类。判别式模型不能反映训练数据本身的特性，能力有限，其只能告诉我们分类的类别。\n",
    "\n",
    "2.生成式模型这么做\n",
    "\n",
    "一般我们对每一个类建立一个模型，有多少个类别，我们就建立多少个模型。比方说类别标签有｛猫，狗，猪｝，那首先根据猫的特征学习出一个猫的模型，再根据狗的特征学习出狗的模型，之后分别计算新测试样本 x 跟三个类别的联合概率 $P(x,y)$ ，然后根据贝叶斯公式：\n",
    "$$\n",
    "P(y|x)=\\frac{P(x,y)}{P(x)}\n",
    "$$\n",
    "分别计算 $P(y|x)$ ，选择三类中最大的$ P(y|x)$ 作为样本的分类。\n",
    "\n",
    "我们发现，不管是生成式模型还是判别式模型，它们最终的判断依据都是条件概率 P(y|x) ，但是生成式模型先计算了联合概率 $P(x,y)$ ，再由贝叶斯公式计算得到条件概率。生成式模型可以体现更多数据本身的分布信息，其普适性更广。\n",
    "\n",
    "最后，两者的联系是：由生成式模型可以得到判别式模型，但由判别式模型不能得到生成式模型。\n",
    "\n",
    "\n",
    "\n",
    "以上就是生成式模型和判别式模型的一些区别，希望能给大家一些帮助。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
